package com.algorithm.array;

import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

@Slf4j
public class ArraySulotion01 {
    public int removeDuplicates(int[] nums) {
        if(nums==null){
            return -1;
        }
        if(nums.length==1){
            return nums.length;
        }
        int slow=0;
        int fast=1;
        //定义一个计数
        int count=0;
        while(fast<nums.length){
            /**
             * 第二步
             * 开始 slow = 1   fast = 2  count= 1
             * 结束 slow = 1   fast = 3  count= 1
             */
            if(count==1&&nums[fast]==nums[slow]){
                fast++;
                continue;
            }else if(nums[fast]!=nums[slow]){
                /**
                 * 第三步
                 * 开始 slow = 1   fast = 3  count= 1
                 * 由于 nums[fast]!=nums[slow] 将 nums[fast] 赋值给 slow的下一个元素
                 * count 清零重新计数
                 *  fast + 1
                 * 结束 slow = 2   fast = 4  count= 1
                 */
                nums[++slow]=nums[fast];
                count=0;
                fast++;
                continue;
            }
            /**
             *  {1,1,1,2,2,3};
             * 开始 slow = 0  fast = 1
             * nums[slow] == nums[fast]  =>  nums[slow+1] = nums[fast]
             * 快指针与慢指针相等  count+1;
             * 将快指针的指赋值给 慢指针的下一个值 这个样相邻的两个值就相等了
             * 结束 slow = 1   fast = 2  count= 1
              */

            if(nums[slow]==nums[fast]){
                nums[++slow]=nums[fast];
                count++;
            }
            fast++;
        }
        return ++slow;
        
    }

    @Test
    @DisplayName("给你一个有序数组 nums ，请你 原地 删除重复出现的元素，使每个元素 最多出现两次 ，返回删除后数组的新长度。" +
            "不要使用额外的数组空间，你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。")
    public void test(){
        int [] nums = {1,1,1,2,2,3};
        removeDuplicates(nums);
        log.info("result is ");
    }
}
